/**
 * TradingView 调试助手
 * 用于诊断TradingView显示问题
 */

/**
 * 检查TradingView图表状态
 */
export function checkTradingViewStatus(containerId = 'kline_detail') {
  console.log('=== TradingView 状态检查 ===')
  
  const container = document.getElementById(containerId)
  if (!container) {
    console.error('❌ 容器未找到:', containerId)
    return false
  }
  
  console.log('✅ 容器找到:', container)
  
  // 检查容器尺寸
  const rect = container.getBoundingClientRect()
  console.log('容器尺寸:', {
    width: rect.width,
    height: rect.height,
    offsetWidth: container.offsetWidth,
    offsetHeight: container.offsetHeight
  })
  
  // 检查图表元素
  const chartElements = container.querySelectorAll('div[data-name="chart"]')
  const canvasElements = container.querySelectorAll('canvas')
  const iframeElements = container.querySelectorAll('iframe')
  
  console.log('图表元素:', {
    chartDivs: chartElements.length,
    canvasElements: canvasElements.length,
    iframeElements: iframeElements.length,
    totalChildren: container.children.length
  })
  
  // 检查TradingView对象
  console.log('TradingView对象:', {
    exists: typeof TradingView !== 'undefined',
    widget: typeof TradingView?.widget !== 'undefined'
  })
  
  // 检查容器内容
  if (container.innerHTML.length < 100) {
    console.warn('⚠️ 容器内容很少，可能没有正确渲染')
    console.log('容器HTML:', container.innerHTML)
  } else {
    console.log('✅ 容器有内容，长度:', container.innerHTML.length)
  }
  
  return {
    containerFound: true,
    hasSize: rect.width > 0 && rect.height > 0,
    hasChartElements: chartElements.length > 0 || canvasElements.length > 0,
    hasContent: container.innerHTML.length > 100
  }
}

/**
 * 强制刷新TradingView图表
 */
export function forceRefreshTradingView(widget) {
  console.log('=== 强制刷新TradingView ===')
  
  if (!widget) {
    console.error('❌ Widget对象不存在')
    return false
  }
  
  try {
    // 尝试各种刷新方法
    if (typeof widget.resize === 'function') {
      widget.resize()
      console.log('✅ 调用widget.resize()')
    }
    
    if (typeof widget.remove === 'function' && typeof widget.recreate === 'function') {
      // 某些版本可能有recreate方法
      widget.recreate()
      console.log('✅ 调用widget.recreate()')
    }
    
    return true
  } catch (error) {
    console.error('❌ 刷新失败:', error)
    return false
  }
}

/**
 * 检查数据源状态
 */
export function checkDatafeedStatus(datafeeds) {
  console.log('=== 数据源状态检查 ===')
  
  if (!datafeeds) {
    console.error('❌ 数据源未初始化')
    return false
  }
  
  console.log('✅ 数据源存在:', datafeeds)
  
  // 检查数据源方法
  const methods = ['onReady', 'getBars', 'subscribeBars', 'unsubscribeBars']
  methods.forEach(method => {
    const exists = typeof datafeeds[method] === 'function'
    console.log(`${method}:`, exists ? '✅' : '❌')
  })
  
  return true
}

/**
 * 运行完整的诊断
 */
export function runTradingViewDiagnostics(containerId = 'kline_detail', widget = null, datafeeds = null) {
  console.log('🚀 开始TradingView完整诊断...')
  
  const results = {
    container: checkTradingViewStatus(containerId),
    datafeed: checkDatafeedStatus(datafeeds),
    widget: widget ? 'exists' : 'missing'
  }
  
  console.log('=== 诊断结果 ===')
  console.log('容器状态:', results.container)
  console.log('数据源状态:', results.datafeed)
  console.log('Widget状态:', results.widget)
  
  // 给出建议
  if (!results.container.hasSize) {
    console.warn('💡 建议: 容器没有尺寸，检查CSS样式')
  }
  
  if (!results.container.hasChartElements) {
    console.warn('💡 建议: 没有找到图表元素，可能需要重新初始化')
  }
  
  if (!results.container.hasContent) {
    console.warn('💡 建议: 容器内容为空，检查初始化过程')
  }
  
  return results
}

// 如果在浏览器环境中，将函数挂载到window对象
if (typeof window !== 'undefined') {
  window.TradingViewDebug = {
    checkStatus: checkTradingViewStatus,
    forceRefresh: forceRefreshTradingView,
    checkDatafeed: checkDatafeedStatus,
    runDiagnostics: runTradingViewDiagnostics
  }
}
